{"cells":[{"metadata":{},"cell_type":"markdown","source":"\n# Contrôle - Première NSI - Correction\n\n### Consignes :\n- Votre code doit être bien structuré et les fonctions correctement définies.\n- L'indentation entre vos lignes de programmation sera prise en compte dans le barème.\n- Vous n'avez pas le droit d'utiliser dans vos programmes les fonctions `min` et `max` de python, ni la notion `**` pour fusionner les listes de dictionnaires."},{"metadata":{},"cell_type":"markdown","source":"\n## Question 1\nÉcrire une fonction `trouver_maximum` qui retourne le maximum d'une liste donnée.\n\n**Exemple d'entrée :**\n```python\ntrouver_maximum([3, 7, 2, 9, 4]) # retourne 9\n```\n\n**À compléter ci-dessous :**\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndef trouver_maximum(liste):\n max_val = liste[0]\n for val in liste:\n if val > max_val:\n max_val = val\n return max_val\n\n# Test\ntrouver_maximum([3, 7, 2, 9, 4]) # retourne 9\n","execution_count":1,"outputs":[{"output_type":"execute_result","execution_count":1,"data":{"text/plain":"9"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"\n## Question 2\nUtiliser la fonction `trouver_maximum` pour implémenter une fonction `tri_inverse` qui trie une liste par ordre décroissant.\n\n**Exemple d'entrée :**\n```python\ntri_inverse([3, 7, 2, 9, 4]) # retourne [9, 7, 4, 3, 2]\n```\n\n**À compléter ci-dessous :**\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndef tri_inverse(liste):\n resultat = []\n while liste:\n max_val = trouver_maximum(liste)\n resultat.append(max_val)\n liste.remove(max_val)\n return resultat\n\n# Test\ntri_inverse([3, 7, 2, 9, 4]) # retourne [9, 7, 4, 3, 2]\n","execution_count":2,"outputs":[{"output_type":"execute_result","execution_count":2,"data":{"text/plain":"[9, 7, 4, 3, 2]"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"\n## Question 3\nÉcrire une fonction `tri_insertion_inverse` qui trie une liste par ordre décroissant en utilisant la méthode du tri par insertion.\n\n**Exemple d'entrée :**\n```python\ntri_insertion_inverse([3, 7, 2, 9, 4]) # retourne [9, 7, 4, 3, 2]\n```\n\n**À compléter ci-dessous :**\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndef tri_insertion_inverse(liste):\n for i in range(1, len(liste)):\n cle = liste[i]\n j = i - 1\n while j >= 0 and cle > liste[j]: # Note: condition inversée pour ordre décroissant\n liste[j + 1] = liste[j]\n j -= 1\n liste[j + 1] = cle\n return liste\n\n# Test\ntri_insertion_inverse([3, 7, 2, 9, 4]) # retourne [9, 7, 4, 3, 2]\n","execution_count":3,"outputs":[{"output_type":"execute_result","execution_count":3,"data":{"text/plain":"[9, 7, 4, 3, 2]"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"\n## Question 4\nÀ partir du dictionnaire suivant :\n```python\ndonnees = [\n {\"produit\": \"Pomme\", \"prix\": 1.2},\n {\"produit\": \"Banane\", \"prix\": 0.8},\n {\"produit\": \"Orange\", \"prix\": 1.5},\n {\"produit\": \"Mangue\", \"prix\": 2.0}\n]\n```\n\nCréer une fonction `tri_par_prix` qui trie la liste `donnees` par prix croissant.\n\n**Exemple d'entrée :**\n```python\ntri_par_prix(donnees) # trie par prix croissant\n```\n\n**À compléter ci-dessous :**\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndef tri_par_prix(liste):\n for i in range(len(liste)):\n min_index = i\n for j in range(i + 1, len(liste)):\n if liste[j]['prix'] < liste[min_index]['prix']:\n min_index = j\n liste[i], liste[min_index] = liste[min_index], liste[i]\n return liste\n\n# Test\ndonnees = [\n {\"produit\": \"Pomme\", \"prix\": 1.2},\n {\"produit\": \"Banane\", \"prix\": 0.8},\n {\"produit\": \"Orange\", \"prix\": 1.5},\n {\"produit\": \"Mangue\", \"prix\": 2.0}\n]\n\ntri_par_prix(donnees)\n","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"data":{"text/plain":"[{'produit': 'Banane', 'prix': 0.8}, {'produit': 'Pomme', 'prix': 1.2}, {'produit': 'Orange', 'prix': 1.5}, {'produit': 'Mangue', 'prix': 2.0}]"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"### Question 5\nÀ partir du nouveau dictionnaire suivant :\n```python\ncodes_barres = [ {\"produit\": \"Pomme\", \"code_barre\": \"1234567890123\"},\n {\"produit\": \"Banane\", \"code_barre\": \"9876543210987\"},\n {\"produit\": \"Orange\", \"code_barre\": \"2345678901234\"},\n {\"produit\": \"Mangue\", \"code_barre\": \"5678901234567\"} ]\n```\nCréer une fonction `def fusionner_listes` qui réalise une jointure entre la liste `donnees` de la question 4 et la liste `codes_barres` , en utilisant la clé commune \"produit\" pour fusionner les informations des deux listes dans une nouvelle liste ? \n"},{"metadata":{"trusted":true},"cell_type":"code","source":"def fusionner_listes(liste1, liste2):\n liste = []\n for item1 in liste1:\n for item2 in liste2:\n if item1[\"produit\"] == item2[\"produit\"]:\n fusion = {}\n # Copier les clés et valeurs de item1\n for key, value in item1.items():\n fusion[key] = value\n # Copier les clés et valeurs de item2 (les valeurs de item2 écrasent celles de item1 en cas de conflit)\n for key, value in item2.items():\n fusion[key] = value\n liste.append(fusion)\n return liste\n\n# Test\ncodes_barres = [ {\"produit\": \"Pomme\", \"code_barre\": \"1234567890123\"},\n {\"produit\": \"Banane\", \"code_barre\": \"9876543210987\"},\n {\"produit\": \"Orange\", \"code_barre\": \"2345678901234\"},\n {\"produit\": \"Mangue\", \"code_barre\": \"5678901234567\"} ]\n\nfusionner_listes(donnees, codes_barres)","execution_count":9,"outputs":[{"output_type":"execute_result","execution_count":9,"data":{"text/plain":"[{'produit': 'Banane', 'prix': 0.8, 'code_barre': '9876543210987'}, {'produit': 'Pomme', 'prix': 1.2, 'code_barre': '1234567890123'}, {'produit': 'Orange', 'prix': 1.5, 'code_barre': '2345678901234'}, {'produit': 'Mangue', 'prix': 2.0, 'code_barre': '5678901234567'}]"},"metadata":{}}]}],"metadata":{},"nbformat":4,"nbformat_minor":2}